home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Hyper / P / Palet.cpt / Palette XFCN / card_4434.txt < prev    next >
Text File  |  1988-09-20  |  41KB  |  801 lines

  1. -- card: 4434 from stack: in
  2. -- bmap block id: 4729
  3. -- flags: 0000
  4. -- background id: 4114
  5. -- name: 
  6.  
  7.  
  8. -- part 12 (button)
  9. -- low flags: 00
  10. -- high flags: A004
  11. -- rect: left=320 top=187 right=209 bottom=485
  12. -- title width / last selected line: 0
  13. -- icon id / first selected line: 0 / 0
  14. -- text alignment: 1
  15. -- font id: 0
  16. -- text size: 12
  17. -- style flags: 0
  18. -- line height: 16
  19. -- part name: Palette Demo Please
  20. ----- HyperTalk script -----
  21. on mouseUp
  22.   push card
  23.   set lockScreen to true
  24.   go to card id 3058
  25. end mouseUp
  26.  
  27.  
  28.  
  29. -- part 6 (button)
  30. -- low flags: 80
  31. -- high flags: 8004
  32. -- rect: left=218 top=25 right=75 bottom=270
  33. -- title width / last selected line: 0
  34. -- icon id / first selected line: 5155 / 5155
  35. -- text alignment: 1
  36. -- font id: 0
  37. -- text size: 12
  38. -- style flags: 0
  39. -- line height: 16
  40. -- part name: Hi!
  41. ----- HyperTalk script -----
  42. on mouseUp
  43.   hide cd btn "Hi!"
  44. end mouseUp
  45.  
  46.  
  47.  
  48. -- part 24 (button)
  49. -- low flags: 00
  50. -- high flags: 2000
  51. -- rect: left=460 top=297 right=334 bottom=505
  52. -- title width / last selected line: 0
  53. -- icon id / first selected line: 1011 / 1011
  54. -- text alignment: 1
  55. -- font id: 0
  56. -- text size: 12
  57. -- style flags: 0
  58. -- line height: 16
  59. -- part name: Home
  60. ----- HyperTalk script -----
  61. on mouseUp
  62.   go home
  63. end mouseUp
  64.  
  65.  
  66.  
  67. -- part 25 (button)
  68. -- low flags: 00
  69. -- high flags: A004
  70. -- rect: left=14 top=266 right=288 bottom=179
  71. -- title width / last selected line: 0
  72. -- icon id / first selected line: 0 / 0
  73. -- text alignment: 1
  74. -- font id: 0
  75. -- text size: 12
  76. -- style flags: 0
  77. -- line height: 16
  78. -- part name: Is It Useful?!??
  79. ----- HyperTalk script -----
  80. on mouseUp
  81.   show cd field "Useful"
  82. end mouseUp
  83.  
  84.  
  85.  
  86. -- part 23 (button)
  87. -- low flags: 00
  88. -- high flags: A004
  89. -- rect: left=14 top=235 right=257 bottom=179
  90. -- title width / last selected line: 0
  91. -- icon id / first selected line: 0 / 0
  92. -- text alignment: 1
  93. -- font id: 0
  94. -- text size: 12
  95. -- style flags: 0
  96. -- line height: 16
  97. -- part name: Palette XFCN's Modes
  98. ----- HyperTalk script -----
  99. on mouseUp
  100.   show cd field "Palette XFCN's Modes"
  101. end mouseUp
  102.  
  103.  
  104.  
  105. -- part 27 (button)
  106. -- low flags: 00
  107. -- high flags: A004
  108. -- rect: left=14 top=297 right=319 bottom=179
  109. -- title width / last selected line: 0
  110. -- icon id / first selected line: 0 / 0
  111. -- text alignment: 1
  112. -- font id: 0
  113. -- text size: 12
  114. -- style flags: 0
  115. -- line height: 16
  116. -- part name: Is It Free?
  117. ----- HyperTalk script -----
  118. on mouseUp
  119.   show cd field "Free"
  120. end mouseUp
  121.  
  122.  
  123.  
  124. -- part 7 (button)
  125. -- low flags: 00
  126. -- high flags: 0000
  127. -- rect: left=345 top=29 right=57 bottom=486
  128. -- title width / last selected line: 0
  129. -- icon id / first selected line: 0 / 0
  130. -- text alignment: 1
  131. -- font id: 0
  132. -- text size: 12
  133. -- style flags: 0
  134. -- line height: 16
  135. -- part name: Show Oscar
  136. ----- HyperTalk script -----
  137. on mouseUp
  138.   show cd btn "Hi!"
  139.   beep
  140. end mouseUp
  141.  
  142.  
  143.  
  144. -- part 29 (button)
  145. -- low flags: 00
  146. -- high flags: 0000
  147. -- rect: left=404 top=296 right=342 bottom=459
  148. -- title width / last selected line: 0
  149. -- icon id / first selected line: 29114 / 29114
  150. -- text alignment: 1
  151. -- font id: 0
  152. -- text size: 12
  153. -- style flags: 0
  154. -- line height: 16
  155. -- part name: Return
  156. ----- HyperTalk script -----
  157. on mouseUp
  158.   visual effect iris close
  159.   pop card
  160. end mouseUp
  161.  
  162.  
  163.  
  164. -- part 30 (button)
  165. -- low flags: 00
  166. -- high flags: 0000
  167. -- rect: left=348 top=296 right=342 bottom=403
  168. -- title width / last selected line: 0
  169. -- icon id / first selected line: 2478 / 2478
  170. -- text alignment: 1
  171. -- font id: 0
  172. -- text size: 12
  173. -- style flags: 0
  174. -- line height: 16
  175. -- part name: Return
  176. ----- HyperTalk script -----
  177. on mouseDown
  178.   set lockScreen to true
  179.   if visible of card btn "Oscar" is true then
  180.     hide card btn "Oscar"
  181.     hide card field "About"
  182.   else
  183.     show card btn "Oscar"
  184.     show card field "About"
  185.   end if
  186. end mouseDown
  187.  
  188.  
  189.  
  190. -- part 8 (button)
  191. -- low flags: 00
  192. -- high flags: A004
  193. -- rect: left=14 top=86 right=108 bottom=179
  194. -- title width / last selected line: 0
  195. -- icon id / first selected line: 0 / 0
  196. -- text alignment: 1
  197. -- font id: 0
  198. -- text size: 12
  199. -- style flags: 0
  200. -- line height: 16
  201. -- part name: What It Does
  202. ----- HyperTalk script -----
  203. on mouseUp
  204.   show cd field "What It Does"
  205. end mouseUp
  206.  
  207.  
  208.  
  209. -- part 11 (button)
  210. -- low flags: 00
  211. -- high flags: A004
  212. -- rect: left=14 top=115 right=137 bottom=179
  213. -- title width / last selected line: 0
  214. -- icon id / first selected line: 0 / 0
  215. -- text alignment: 1
  216. -- font id: 0
  217. -- text size: 12
  218. -- style flags: 0
  219. -- line height: 16
  220. -- part name: How It Works
  221. ----- HyperTalk script -----
  222. on mouseUp
  223.   show cd field "How It Works"
  224. end mouseUp
  225.  
  226.  
  227.  
  228. -- part 13 (button)
  229. -- low flags: 00
  230. -- high flags: A004
  231. -- rect: left=14 top=145 right=167 bottom=179
  232. -- title width / last selected line: 0
  233. -- icon id / first selected line: 0 / 0
  234. -- text alignment: 1
  235. -- font id: 0
  236. -- text size: 12
  237. -- style flags: 0
  238. -- line height: 16
  239. -- part name: See Diagram
  240. ----- HyperTalk script -----
  241. on mouseUp
  242.   visual effect iris open
  243.   go to card id 6105
  244. end mouseUp
  245.  
  246.  
  247.  
  248. -- part 16 (button)
  249. -- low flags: 00
  250. -- high flags: 0000
  251. -- rect: left=201 top=95 right=240 bottom=275
  252. -- title width / last selected line: 0
  253. -- icon id / first selected line: 0 / 0
  254. -- text alignment: 1
  255. -- font id: 0
  256. -- text size: 12
  257. -- style flags: 0
  258. -- line height: 16
  259. -- part name: About
  260. ----- HyperTalk script -----
  261. on mouseDown
  262.   set lockScreen to true
  263.   if visible of card btn "Oscar" is true then
  264.     hide card btn "Oscar"
  265.     hide card field "About"
  266.   else
  267.     show card btn "Oscar"
  268.     show card field "About"
  269.   end if
  270. end mouseDown
  271.  
  272.  
  273.  
  274. -- part 19 (button)
  275. -- low flags: 00
  276. -- high flags: A004
  277. -- rect: left=14 top=175 right=197 bottom=179
  278. -- title width / last selected line: 0
  279. -- icon id / first selected line: 0 / 0
  280. -- text alignment: 1
  281. -- font id: 0
  282. -- text size: 12
  283. -- style flags: 0
  284. -- line height: 16
  285. -- part name: The ExtToolsƒ Font
  286. ----- HyperTalk script -----
  287. on mouseUp
  288.   show cd field "The ExtToolsΔí Font"
  289. end mouseUp
  290.  
  291.  
  292.  
  293. -- part 21 (button)
  294. -- low flags: 00
  295. -- high flags: A004
  296. -- rect: left=14 top=205 right=227 bottom=179
  297. -- title width / last selected line: 0
  298. -- icon id / first selected line: 0 / 0
  299. -- text alignment: 1
  300. -- font id: 0
  301. -- text size: 12
  302. -- style flags: 0
  303. -- line height: 16
  304. -- part name: The Stack's Resources
  305. ----- HyperTalk script -----
  306. on mouseUp
  307.   show cd field "The Stack's Resources"
  308. end mouseUp
  309.  
  310.  
  311.  
  312. -- part 9 (field)
  313. -- low flags: 81
  314. -- high flags: 2004
  315. -- rect: left=5 top=82 right=340 bottom=509
  316. -- title width / last selected line: 0
  317. -- icon id / first selected line: 0 / 0
  318. -- text alignment: 0
  319. -- font id: 3
  320. -- text size: 9
  321. -- style flags: 0
  322. -- line height: 12
  323. -- part name: What It Does
  324. ----- HyperTalk script -----
  325. on mouseUp
  326.   hide cd field "What It Does"
  327. end mouseUp
  328.  
  329.  
  330. -- part 10 (field)
  331. -- low flags: 81
  332. -- high flags: 2007
  333. -- rect: left=5 top=82 right=340 bottom=509
  334. -- title width / last selected line: 0
  335. -- icon id / first selected line: 0 / 0
  336. -- text alignment: 0
  337. -- font id: 3
  338. -- text size: 9
  339. -- style flags: 0
  340. -- line height: 12
  341. -- part name: How It Works
  342. ----- HyperTalk script -----
  343. on mouseUp
  344.   hide cd field "How It Works"
  345. end mouseUp
  346.  
  347.  
  348. -- part 15 (field)
  349. -- low flags: 81
  350. -- high flags: 2004
  351. -- rect: left=296 top=81 right=179 bottom=505
  352. -- title width / last selected line: 0
  353. -- icon id / first selected line: 0 / 0
  354. -- text alignment: 0
  355. -- font id: 3
  356. -- text size: 9
  357. -- style flags: 0
  358. -- line height: 12
  359. -- part name: About
  360. ----- HyperTalk script -----
  361. on mouseUp
  362.   set lockScreen to true
  363.   hide card btn "Oscar"
  364.   hide card field "About"
  365. end mouseUp
  366.  
  367.  
  368.  
  369. -- part 14 (button)
  370. -- low flags: 80
  371. -- high flags: 0000
  372. -- rect: left=296 top=81 right=120 bottom=333
  373. -- title width / last selected line: 0
  374. -- icon id / first selected line: 5155 / 5155
  375. -- text alignment: 1
  376. -- font id: 0
  377. -- text size: 12
  378. -- style flags: 0
  379. -- line height: 16
  380. -- part name: Oscar
  381. ----- HyperTalk script -----
  382. on mouseUp
  383.   set lockScreen to true
  384.   hide card btn "Oscar"
  385.   hide card field "About"
  386. end mouseUp
  387.  
  388.  
  389.  
  390. -- part 18 (field)
  391. -- low flags: 81
  392. -- high flags: 2004
  393. -- rect: left=5 top=82 right=340 bottom=509
  394. -- title width / last selected line: 0
  395. -- icon id / first selected line: 0 / 0
  396. -- text alignment: 0
  397. -- font id: 3
  398. -- text size: 9
  399. -- style flags: 0
  400. -- line height: 12
  401. -- part name: The ExtToolsƒ Font
  402. ----- HyperTalk script -----
  403. on mouseUp
  404.   hide cd field "The ExtToolsΔí Font"
  405. end mouseUp
  406.  
  407.  
  408. -- part 20 (field)
  409. -- low flags: 81
  410. -- high flags: 2007
  411. -- rect: left=5 top=82 right=340 bottom=509
  412. -- title width / last selected line: 0
  413. -- icon id / first selected line: 0 / 0
  414. -- text alignment: 0
  415. -- font id: 3
  416. -- text size: 9
  417. -- style flags: 0
  418. -- line height: 12
  419. -- part name: The Stack's Resources
  420. ----- HyperTalk script -----
  421. on mouseUp
  422.   hide cd field "The Stack's Resources"
  423. end mouseUp
  424.  
  425.  
  426. -- part 22 (field)
  427. -- low flags: 81
  428. -- high flags: 2007
  429. -- rect: left=5 top=82 right=340 bottom=509
  430. -- title width / last selected line: 0
  431. -- icon id / first selected line: 0 / 0
  432. -- text alignment: 0
  433. -- font id: 3
  434. -- text size: 9
  435. -- style flags: 0
  436. -- line height: 12
  437. -- part name: Palette XFCN's Modes
  438. ----- HyperTalk script -----
  439. on mouseUp
  440.   hide cd field "Palette XFCN's Modes"
  441. end mouseUp
  442.  
  443.  
  444. -- part 26 (field)
  445. -- low flags: 81
  446. -- high flags: 2004
  447. -- rect: left=5 top=82 right=340 bottom=509
  448. -- title width / last selected line: 0
  449. -- icon id / first selected line: 0 / 0
  450. -- text alignment: 0
  451. -- font id: 3
  452. -- text size: 9
  453. -- style flags: 0
  454. -- line height: 12
  455. -- part name: Useful
  456. ----- HyperTalk script -----
  457. on mouseUp
  458.   hide cd field "Useful"
  459. end mouseUp
  460.  
  461.  
  462. -- part 28 (field)
  463. -- low flags: 81
  464. -- high flags: 2007
  465. -- rect: left=5 top=82 right=340 bottom=509
  466. -- title width / last selected line: 0
  467. -- icon id / first selected line: 0 / 0
  468. -- text alignment: 0
  469. -- font id: 3
  470. -- text size: 9
  471. -- style flags: 0
  472. -- line height: 12
  473. -- part name: Free
  474. ----- HyperTalk script -----
  475. on mouseUp
  476.   hide cd field "Free"
  477. end mouseUp
  478.  
  479.  
  480. -- part contents for card part 9
  481. ----- text -----
  482.                                              The Palette XFCN by Oscar F. Hills ¬© 1988                         Version 1.03b1
  483.  
  484.      This XFCN was actually written after a conversation at the Boston Mac Expo in which a gentleman who shall remain nameless almost convinced me that it was impossible to write a reasonable HyperCard external which would allow the user to install an additional Pull-Down, Tear-Off menu like the "Tools" menu, but one in which the user could customize the selections and have them do anything he/she wanted.
  485.  
  486.      I then decided to undertake the challenge, and have been working on it ever since. The result is here before you, something in between a kludgey workaround and a nice addition to HyperTalk. As in the "Tools" menu, the little tool icons are actually font characters which you can change into anything you wish using ResEdit or a Font Editor. Then you can write HyperTalk scripts to define what each of the 18 selections will do. The menu can be pulled down, torn off, hidden, and shown exactly like the "Tools" (or "Pattern") menu. There are additional features explained later, which the "Tools" menu does not have.
  487.  
  488.                                                 WARNING  ‚Ä¢  WARNING  ‚Ä¢  WARNING
  489.                                                          This Is a Beta Version
  490. ‚Ä¢‚Ä¢‚Ä¢   PLEASE READ ALL DOCUMENTATION BEFORE USING THE PALETTE XFCN IN YOUR OWN STACKS   ‚Ä¢‚Ä¢‚Ä¢
  491.                         It may do a few things which will surprise you, not always pleasantly.                                                       
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498. -- part contents for card part 10
  499. ----- text -----
  500.                                              The Palette XFCN by Oscar F. Hills ¬© 1988                         Version 1.03b1
  501.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  502.                                                      How It Works (In Some Detail)
  503.  
  504.      You will be doing yourself a favor while learning to use the Palette XFCN if you read this section carefully, because once you understand the underlying "mechanics" of it all then the necessary scripting makes much more sense.
  505.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  506.      Let's break the Palette XFCN down into two components, 1) the Pull-Down Menu, and 2) the "torn off" box menu or "Palette" which you can drag around the screen. 
  507.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  508.      We will consider the Pull-Down Menu first. When you call Palette from HyperTalk it will install a menu of any name you choose in the menu bar. When you pull it down you will see a menu like the "Tools" menu only with some unusual "tools" in it. These "tools" are actually the characters A-R in a special font called ExtToolsΔí which resides in the stack's resource fork. You may edit these characters with ResEdit or a font editor to make them into any "tools" of your choice. In fact you may create and use a whole new font if you wish. Palette allows you this fexibility.
  509.      In spite of the APPEARANCE of these characters (dingbats), they are still seen by HyperCard as the characters A-R, and can be accessed by the doMenu command. For example 'doMenu "A"' will cause the first tool to do it's thing.
  510.      It is essentially through this method that we define each "tool's" function. We need a script in either the background or the stack which intercepts menu selections, checks for A-R, and carries them out if it finds them. This script looks like this  (I'll explain the "S" at the beginning in a minute):
  511.  
  512. on doMenu which
  513.   if which is "S" then
  514.    -- script of your choice
  515.   else
  516.     if which is "A" then
  517.      -- script of your choice
  518.     else
  519.       if which is "B" then
  520.        -- script of your choice
  521.       else
  522.         if which is "C" then
  523.         -- script of your choice
  524.         else
  525.           if which is "D" then
  526.           -- script of your choice
  527.           else
  528.             if which is "E" then
  529.             -- script of your choice
  530.             else
  531.               if which is "F" then
  532.               -- script of your choice
  533.               else
  534.                 if which is "G" then
  535.                 -- script of your choice
  536.                 else
  537.                   if which is "H" then
  538.                   -- script of your choice
  539.                   else
  540.                     if which is "I" then
  541.                     -- script of your choice
  542.                     else
  543.                       if which is "J" then
  544.                       -- script of your choice
  545.                       else
  546.                         if which is "K" then
  547.                         -- script of your choice
  548.                         else
  549.                           if which is "L" then
  550.                           -- script of your choice
  551.                           else
  552.                             if which is "M" then
  553.                             -- script of your choice
  554.                             else
  555.                               if which is "N" then
  556.                               -- script of your choice
  557.                               else
  558.                                 if which is "O" then
  559.                                 -- script of your choice
  560.                                 else
  561.                                   if which is "P" then 
  562.                                   -- script of your choice
  563.                                   else
  564.                                     if which is "Q" then
  565.                                     -- script of your choice
  566.                                     else
  567.                                       if which is "R" then
  568.                                       -- script of your choice
  569.                                       else
  570.                                         pass doMenu
  571.                                       end if
  572.                                     end if
  573.                                   end if
  574.                                 end if
  575.                               end if
  576.                             end if
  577.                           end if
  578.                         end if
  579.                       end if
  580.                     end if
  581.                   end if
  582.                 end if
  583.               end if
  584.             end if
  585.           end if
  586.         end if
  587.       end if
  588.     end if
  589.   end if
  590. end doMenu
  591.  
  592.      Easy enough, although it takes up a lot of space and can look complicated. It's often easiest to define a separate function or procedure for each Menu Item and then just call it from the above structure. Now to be sure it's clear, if the user clicks on the first (upper left corner) menu item (or tool) the menu item is read by HyperCard as "A" and we use the above handler to intercept it and carry out some function of our own choosing.
  593.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  594.      Now for the second half, the Palette itself, i.e., the torn-off menu/box.  The Palette XFCN creates a modeless (means you can still do other things while it is hanging around) dialog box shaped just like the pull-down menu. Now this box exists, but is hidden, as soon as you call the Palette XFCN from HyperTalk. Just as with the "Tools" menu, if you pull down the "Palette" menu and then pull it further you get a gray box which follows the cursor around. When you let go of the mouse, the Palette appears where the gray box was, just like the "Tools" menu. Only one detail with the Palette XFCN, we have to make this happen. When we let go of the mouse with the gray box visible the menu returns the character "S", that's one letter after "R" which is the last menu item. You could also think of it as standing for "Show Menu." This is the reason for the "S" in the first part of the above "doMenu" handler. We'll learn more specifics later.
  595.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  596.     IMPORTANT:  Because the box is modeless, we must have a way for it to be attached to our stack at the same time as it's independent. I am still working (possibly fruitlessly) on a patch for this. Until then we must use something of a kludge, and that is the following:  whenever you call the Palette XFCN and you get the menu installed, a secret, hidden button named "Palette‚Ñ¢¬©√ü" is created. When the Palette is hidden, so is the button; when the Palette is visible, the button is also visible but hiding right behind the Palette. The button automatically stays directly behind the Palette, and it is this button that actually intercepts the mouse clicks. Thus, the Palette only functions when the button is able to pick up mouseEnter and mouseWithin messages. If you are way ahead of me you have realized that for this reason the Palette does not function with the field tool or the button tool. HyperCard does not send messages in these modes so our box can't know what's going on. The pull-down menu still works however.
  597.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  598.      If you are a generally critical and negativistic thinker as I am, then you have probably recognized some other limitations of the Palette XFCN. One is that if you move the Palette while in the field or button tool you will expose the "Palette‚Ñ¢¬©√ü" button. This is okay because it whips itself into place as soon as you choose the browse tool, and in fact the above is a good way to look at the button if you feel the urge to familiarize yourself with it (but don't delete it).  You will notice that this is a background button. This is so because Palette's usefulness is greatest in a stack where there is lots of moving around between cards, and it would slow things down to create and delete the "Palette‚Ñ¢¬©√ü" button on every card. The drawback, the hitch, the one small detail? That is this: Any CARD buttons which get in the way of the palette will lie in between the Palette modeless dialog box and the "Palette‚Ñ¢¬©√ü" bkgnd button. So when you move the Palette over a card button and click on the Palette where the card button is, 1) Palette will not respond to the click, and 2) the card button will, after you have moved the mouse off of the pallete. What to do about this? Try to keep the card buttons to a minimum, and to keep them off to the sides. This does not turn out to be quite as bad as it sounds, but it is bad enough.
  599.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  600.      When you remove Palette via HyperTalk, the "Palette‚Ñ¢¬©√ü" button is deleted also, but if the stack crashes for some reason (hopefully not related to the Palette XFCN) it will still hang around. If you restart your stack you may wish to delete the extra button to prevent an unwanted accumulation.
  601.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  602.      If you are still reading this it is clear that you are a real HyperCard aficionado, and you have already undoubtedly asked yourself the question "How do the palette, the pull down menu, and HyperCard keep one another informed about what's going on?" The answer is through the following "idle" handler:
  603.  
  604. on idle
  605.   global pickedOne
  606.   put Palette("Update") into temp
  607.   if pickedOne is not empty then doMenu pickedOne
  608.   put empty into pickedOne
  609.   pass idle
  610. end idle
  611.  
  612.      This keeps the whole structure together and without it Palette will not function. In fact, if you leave out the idle handler, you will notice a few strange things, like your menu flash will be set to zero until you leave the stack. Another important aspect of the idle handler is the global variable "pickedOne." It is this variable, as you can see, which transmits the item picked on the palette to the doMenu handler. This global must be named "pickedOne" because that's what the Palette XFCN looks for.  By the way, if you keep getting a dialog box of some kind which comes up on the screen repeatedly, with about the frequency of the idle message, this probably means "pickedOne" has some non-menu item value in it
  613. (usually because you forgot to define a menu item). To stop the recurring dialog box, type "put empty into pickedOne" into the message box.
  614.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  615.      So, there are really only two handlers necessary to implement Palette once it is installed, the doMenu handler and the idle handler. Please continue exploring this stack to learn about many other features, the details of installation, and how Palette might actually be useful.
  616.  
  617.  
  618.  
  619. -- part contents for card part 15
  620. ----- text -----
  621.           Palette XFCN by Oscar F. Hills
  622.                    ¬©Copyright 1988
  623.  
  624.                       Oscar F. Hills
  625.               34 Maplewood Terrace
  626.                 Hamden, CT 06514
  627.                   (203) 287-1913
  628.                  
  629.  
  630. -- part contents for card part 18
  631. ----- text -----
  632.                                              The Palette XFCN by Oscar F. Hills ¬© 1988                         Version 1.03b1
  633.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  634.                                                              "The ExtToolsΔí Font"
  635.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  636.      There is a 'FONT' resource along with its associated 'FOND' resource in the resource fork of the stack, and the family has an id of 145. The FONT is named "ExtToolsΔí" and it contains the characters "A" through 
  637. "R", i.e., ASCII 65-82.  If you take a look at this font with ResEdit, you will see that the characters do not look like A-R, but rather more like a peculiar set of icon-like characters, or DingBats to be more precise.  I have provided a set of these "tools" many of which you will recognize from various HyperCard nooks and crannies.  PLEASE, do not feel as though you have to use THESE. The whole reason for including the "tools" as a FONT resource is so that you are able to create your own. You do this by editing the existing tools using the font edit mode of ResEdit (or using a stand alone Font Editor).
  638.      In fact, if you like, you may create your own "tools" font and name it anything you wish (with your own ID number), and you may have more than one if your stack requires a different Palette in different places. The only limitation here is that you may only have one Palette installed at any given moment.
  639.      In just a bit, we will get into how to let the Palette XFCN know which font you wish to use, but probably the easiest route is to copy the FONT & FOND from this stack into yours, and then edit the characters, i.e.,
  640. "tools" to turn them into whatever you need in your stack (of course, you will also have to write their scripts in the stack, or else they won't do anything). 
  641.  
  642.  
  643. -- part contents for card part 20
  644. ----- text -----
  645.                                              The Palette XFCN by Oscar F. Hills ¬© 1988                         Version 1.03b1
  646.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  647.                                                            The Stack's Resources
  648.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  649.      Don't panic when you catch a glimpse of the Palette XFCN stack's resource fork using ResEdit, ResCopy, or a similar utility. There will appear to be many resources, but we shall make sense of all of them right here.
  650.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  651.      First, we will look at the resources which are essential to running the XFCN. Without the following resources, the Palette XFCN will not run, but it will inform you of the missing resource(s). You must have:
  652.  
  653.      XFCN "Palette" ID = 1819
  654.      MDEF "PaletteMDEF" ID = 298
  655.      DLOG "Palette" ID = 8491
  656.      DITL "Palette" ID = 4028
  657.  
  658.      As you might imagine, the XFCN is the meat of the thing, the MDEF is a definition procedure for the pull-down menu, and the DLOG & DITL are the definitions of the Palette box (torn off).
  659.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  660.      Now if you run the Palette XFCN with just the above resources, you will see a very bland box with the letters A-R in the little squares, and they will be in the system font. Not very exciting. For this reason, you will also wish to include a "tools" font. The one I have included with the stack (which you may edit in your own stacks) is:
  661.  
  662.      FOND "ExtToolsΔí" ID = 145
  663.      FONT "ExtToolsΔí" ID = 18560
  664.  
  665.      If you use ResCopy instead of ResEdit you will also see:
  666.  
  667.      FONT ID = 18572
  668.  
  669.      Copy this one into your stack also.
  670.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  671.      Well, that's it for necessary resources. You will notice several other resources, but these are all just there to make the stack more pleasant to get through. There are several ICON's, my own little version of a ShutDown XCMD, and a variation on Flash which I named "Nukem." You don't need any of these, but you're welcome to put them to any use you wish, they are public domain freebies, such as they are.
  672.  
  673.  
  674. -- part contents for card part 22
  675. ----- text -----
  676.                                              The Palette XFCN by Oscar F. Hills ¬© 1988                         Version 1.03b1
  677.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  678.                                                              Palette XFCN's Modes
  679.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  680.      We have spent a lot of time trying to become familiar with the Palette XFCN, and we have also focused somewhat on its limitations. Now we will focus on its features, which I hope will inspire people actually to use it in appropriate stacks.
  681.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  682.      The Palette XFCN has 10 modes, as follows (the first step is the hard one):
  683.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  684.   1) Install: 
  685.      This mode is used to install the Palette into the MenuBar and to create the Palette (initially invisible). None of the other modes does anything until the Palette is "Installed."  It takes 6 parameters. The first parameter in all modes must be the name of the mode, so in this case the first parameter is "Install."  The second parameter should be the name you wish the new menu to have, such as "NewTools," or in the case of the demo here, "Palette."  The third parameter is the name of the FONT you are using to define your "tools." In this stack, the FONT and hence the third parameter is "ExtToolsΔí."
  686.  
  687.      Now parameters number 4, 5, and 6 require a bit of explanation. You see, each tool on the Palette menu can be represented by one of three kinds of buttons, and you will need to assign each button to one of these three types. The default type is just a plain button, i.e., you click on it and it blinks once, then it's off and running, doing its thing.  The second type is more like you find in the "Tools" menu, and we'll call this a Radio button, i.e., when you click on an inactive one it is highlighted, and the previously highlighted button is "un-highlighted." These parameters will allow you to define which buttons you wish to include in the pool of radio type buttons (the top three in the demo). Finally, the third type of button is what I call a Toggle button, i.e., it can be either on or off, and a mouseClick toggles it to the opposite position. This type of button has its own special highlight in Palette, and you can define which buttons you wish to include in the pool of toggle type buttons. After that, you simply have to write the scripts for each of these items in the "doMenu" handler discussed earlier so that the buttons behave appropriately to their type.
  688.  
  689.      So, with that said, here's how you use parameter's 4, 5, and 6.  Parameter 4 is a text string containg the letter of each Palette button (A-R) which you want highlighted right from the start, as soon as the palette is installed. This obviously applies only to Radio and Toggle type buttons. You can only highlight one initial Radio type button, and you can highlight any or all of your toggle type buttons.
  690.  
  691.      Parameter 5 is a text string containing the letters corresponding to the Palette buttons (or call them menu items, for the sake of precision) just as in parameter 4, except these are the ones you wish to define as Radio type buttons.  Parameter 6 is the same thing, only these are the ones you wish to call Toggle type buttons. 
  692.  
  693.      Any letters you leave out will remain standard blink type buttons. In fact the whole Palette will be that way if you just pass three null strings, i.e., "", for parameters 4, 5, and 6.
  694.  
  695.      Here is the script from the demo in this stack. It starts out with button "C" highlighted, defines buttons "ABC" as radio type, and none as Toggle type, thus leaving the remaining buttons standard.
  696.  
  697.   put "C" into myState
  698.   put "ABC" into myRad
  699.   put "" into myTog
  700.   put Palette("Install","Palette","ExtToolsΔí",myState,myRad,myTog) into temp
  701.  
  702.      One final word, the XFCN returns the decimal address of the MenuHandle, which you do not need, but which you might be vaguely interested in if you go in for such things. Whew...now the rest of the modes are simple...
  703.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  704.   2)  Remove:
  705.      In contrast to "Install," removing the Palette is a piece of cake. "Remove" is the only parameter and it just removes the whole thing, i.e., the Palette, the Menu, and the hidden button. The sample script from the demo is:
  706.      put Palette("Remove") into temp
  707.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  708.   3)  Update:
  709.      This is a key mode which is absolutely essential to the proper functioning of the Palette XFCN and it belongs in the "idle" handler as previously discussed. I won't get into all the housekeeping it does, but take my word for it, it's a lot.  "Update" is the only parameter, but remember, the update mode will not work correctly, i.e., it will not connect the Palette with the menu, unless you include the global variable "pickedOne" in the handler as follows:
  710.  
  711.      on idle
  712.        global pickedOne
  713.        put Palette ("Update") into temp
  714.        if pickedOne is not empty then doMenu pickedOne
  715.        put empty into pickedOne
  716.        pass idle
  717.      end idle
  718.  
  719.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  720.   4)  Show:
  721.      put Palette("Show") into temp
  722.      This just shows the torn off Palette wherever it happens to be. If you have just torn it off, it will be where you left the "gray box", but it will be invisible. Thus, use the "Show" mode in your doMenu handler when the menu item is "S." See the demo script for an example.
  723.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  724.   5)  Hide:
  725.      put Palette("Hide") into temp
  726. Puts the Palette away, but like the "Tools" palette, it is merely invisible, and a subsequent "Show" command will bring it back right where you left it.
  727.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  728.   6)  Toggle:
  729.      Also only one parameter, "Toggle." This shows the Palette if it's invisible and hides it if it's visible. It is most useful for assigning a toggle key combination such as <ctrl>-tab as in the demo:
  730.  
  731.      on controlKey which
  732.        if which is 9 then -- ASCII for TabKey
  733.          put Palette("Toggle") into temp
  734.        end if
  735.        pass controlKey
  736.      end controlKey
  737.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  738.   7)  Query:
  739.      put Palette("Query") into message box
  740. This will return three text strings, separated by commas (that is, it will return three items into the message box, each a text string). This will tell you the current state of the menu. The strings contain the letters (A-R) corresponding to the menu items (buttons) on the Palette. They are the same as in 
  741. "Install." The first string will contain the letters of all the highlighted buttons of all types, the second string tells you which buttons are Radio buttons, and the third string tells you which buttons are Toggle types.  You will see that this is all the information you need.
  742.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  743.   8)  Fill:
  744.      This is the opposite of Query, it lets you redefine the button types, or change the highlighting. It takes four parameters. The first is "Fill," and then it takes three strings identical to 4, 5, and 6 of the install mode. Here is a quick sample:
  745.  
  746.        put Palette("Fill","B","ABC","DEF")
  747.  
  748.      This script would take the existing Palette and Highlight the second item in the top row as requested by the first parameter. The entire top row become radio buttons as requested by the second parameter, and the second row will be toggle buttons as ordered by the third parameter. All the rest will be standard buttons.
  749.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  750.   9)  Disable:
  751.        put Palette("Disable") into temp
  752.      This script, when called after Palette has been installed, will disable the torn off Palette so that only the pull-down menu works. That is, you won't be able to tear it off. This is useful if the user will be using some tool other than the browse tool. Since the torn off palette dosn't work outside the browse tool, you might want to limit access to the pull-down menu only which works in any tool.
  753.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  754. 10)  Enable:
  755.        put Palette("Enable") into temp
  756.      This, as you might have guessed, restores the functioning of the torn off Palette after it has been disabled by the disable mode above.
  757.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  758.      I guess in the interest of completeness I should let you know that there is an 11th mode which takes the one parameter "Link." This is the mode that is used in the hidden background button named 
  759. "Palette‚Ñ¢¬©√ü" which hides behind the torn off Palette. You need never concern yourself with it, but the script for that button in case you're interested is:
  760.  
  761.      on mouseEnter
  762.        global pickedOne
  763.        put Palette ("Link") into pickedOne
  764.      end mouseEnter
  765.  
  766.      on mouseWithin
  767.        global pickedOne
  768.        put Palette ("Link") into pickedOne
  769.      end mouseWithin
  770.  
  771.      This is obviously how the dialog box (since that is what the Palette is in reality) is linked to the stack and to mouse events inside its boundaries.  Are you still with me? Wow, that's HyperCard dedication. Enough about Palette modes.
  772.  
  773.  
  774. -- part contents for card part 26
  775. ----- text -----
  776.                                              The Palette XFCN by Oscar F. Hills ¬© 1988                         Version 1.03b1
  777.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  778.                                                                   Is It Useful?!??
  779.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  780.      One thing's for sure, and that is that the Palette XFCN was a bear to write, and it has a few limitations.  For example, card buttons can get in between the Palette and its button; also, a handler is operating when the mouse is inside the Palette, so it isn't truly modeless, i.e., you have to move the mouse out of the box for some actions to work, e.g., <ctrl>-tab, (also, the Palette itself only functions with the browse tool, although the menu always works). Further, it is a beta XFCN, and I have only been able to test it on my SE. Although it should work on other machines, I can't promise that it will. I can't promise that it will be compatible with future versions of HyperCard either since I have made use of my own undocumented
  781. "discoveries" about HyperCard.  Given these shortcomings, what good is the thing?
  782.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  783.      Well, first, it's just plain fun for any HyperCard nut and just seems like one of those things that's nice to be able to do in HyperCard. 
  784.      Since that doesn't answer the question, how about this: The pull-down menu is not a kludge, and that is useful for all kinds of applications (using disable mode to get rid of the Palette itself). 
  785.      The whole thing (including the Palette itself) is useful in stacks in which the Palette essentially contains all the buttons necessary to negotiate the stack. This allows the user to get around without cluttering up the cards with buttons.
  786.  
  787.  
  788. -- part contents for card part 28
  789. ----- text -----
  790.                                              The Palette XFCN by Oscar F. Hills ¬© 1988                         Version 1.03b1
  791.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  792.                                                                      Is It Free ?
  793.                                                                         ‚Ä¢‚Ä¢‚Ä¢‚Ä¢‚Ä¢
  794.      This is a beta version of the Palette XFCN, and since I can make no guarantees about it, I certainly wouldn't dream of charging any money for it.  It is freely distributed for use as you see fit, but please credit me in your stack if you use it.
  795.      The amount of effort I put into trying in future versions to iron out some of the limitations of Palette
  796. (if this is even possible) will depend on the demand, so if you find the stack useful please let me know. And don't hesitate to send me samples of stacks in which you've used it. 
  797.      For the other HyperCard and general Mac programming fanatics out there, I am open to suggestions on how to get rid of that hidden button and trap the Palette mouseDown events some other way. An idle handler alone is too slow, and it also quits in tools other than the browse tool. A trap patch to intercept HyperCard's GetNextEvent call might process the events, but still wouldn't leave me any way to communicate the results to HyperCard or the XFCN (not to mention, it isn't very nice). I doubt Bill will hand over HyperCard's source code, especially for this. So, I'm open to ideas, but I for one am fresh out, and sort of amazed that this thing actually works as well as it does. Good luck with it, and keep me posted on whether you all can make any use of it.                         
  798.                                                                   Oscar F. Hills
  799.                                                           34 Maplewood Terrace
  800.                                                              Hamden, CT 06514
  801.                                                               (203) 287-1913